#ifndef STORAGE_PROJECT_STORAGE_HPP
#define STORAGE_PROJECT_STORAGE_HPP

#include "Storage/StorageBase.hpp"
#include <boost/any.hpp>

namespace Model { class Project; }

namespace Storage
{

/// @ingroup Storage
/// @brief It specializes the generic storage to deal with projects.
class STORAGE_API ProjectStorage: public StorageBase
{ 
public:
	/// @se StorageBase::StorageBase( StorageFactory&)
	ProjectStorage( StorageFactory& factory);

	/// @brief It loads a project identified with the given id.
	/// @param projectID the identifier of the project to be loaded.
	/// @return the loaded project.
	virtual Model::Project* loadProject( const boost::any& projectID) = 0;

private:
	ProjectStorage& operator=( const ProjectStorage&);
};
	
} // namespace Storage

#endif // STORAGE_PROJECT_STORAGE_HPP
